#ifndef MATRIX_H
#define MATRIX_H

#include "Vec3.h"
#include "Quaternion.h"


class Matrix
{
private:
	float m_matrix[16];

public:
	void Identity();
	void Zero();
	Matrix();
	Matrix(const float* rhs);
	Matrix(const Quaternion& rhs);
	Matrix& operator =(const Quaternion& rhs);

	Matrix& operator *=(const Matrix& rhs);
	Matrix operator *(const Matrix& rhs);
	Matrix& operator *=(const float* f);
	Matrix operator *(const float* f);
	Vec3 operator *(const Vec3& vec);

	void SetTranslation(const Vec3& t);
	void SetRotationX(float rads);
	void SetRotationY(float rads);
	void SetRotationZ(float rads);
	void SetScale(const Vec3& s);

	float& operator[](unsigned int n);
	const float* ToArray() const {return m_matrix;}

	void Transpose();
	//Matrix Inverse() const;
};

#endif